package com.swa99ylum.pjv.sample;

import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

//TODO: 改成普通的 File 读取方式，不必用 NIO
public class FileUtils {

	@SuppressWarnings("resource")
	public static String getFileContent(String filePath) throws Exception {
		FileInputStream fin = new FileInputStream(filePath);
		FileChannel fcin = fin.getChannel();
		
		
		//一次性 能读取 10M 的 文件，但是不建议 多次读取，因为 如果 截断处 是 中文，就会报错。解决方式是 增大 "一次性读取的 容量大小"
		ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024 * 10);
		
		
		
//		ByteBuffer buffer = ByteBuffer.allocate(1);
		/** 如何 截断处 是 中文的话，会出现 半个中文字符的 问题，所以 allocate 的 参数要 足够大，尽可能 一次性 读完文件内的 所有内容 */
//		int i = 0;
		StringBuffer sb = new StringBuffer();
		while (true) {
			buffer.clear();
			int flag = fcin.read(buffer);
			if (flag == -1) {
				break;
			}
			buffer.flip();
			
			CharBuffer charBuffer = null; 
			Charset charset = Charset.forName("UTF-8");  
			CharsetDecoder decoder = charset.newDecoder();  
			charBuffer = decoder.decode(buffer);
//			System.out.println(charBuffer.toString().replaceAll("\r\n", "") );
//			System.out.println(charBuffer.toString() );
			sb.append(charBuffer.toString() );
			
			
			/*
			FileOutputStream fout = new FileOutputStream("aaa2.txt");
			FileChannel fcout = fout.getChannel();
			fcout.write(buffer);
			System.out.println(buffer);
			*/
			
//			System.out.println("i ==> " + i);
//			i++;
		}
		
		return sb.toString();
	}
	
}
